package com.mcp_life.module.mcpclientmodules.controller.mcp.tool;

import com.mcp_life.common.exception.BusinessException;
import com.mcp_life.entity.pojo.RestaurantProduct;
import com.mcp_life.entity.pojo.RestaurantStore;
import com.mcp_life.entity.query.RestaurantQuery;
import com.mcp_life.module.mcpclientmodules.mapper.AiRestaurantMapper;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;

@Service
public class AiRestaurantTool {
    @Autowired
    private AiRestaurantMapper aiRestaurantMapper;
    /**
     * 获取餐厅推荐
     * @param userInput
     * 通过ai查询数据库，获取用户输入的想要的食物，通过ip分析工具，获取用户地理位置，然后根据相关数据为用户推荐餐厅。
     * 例如：用户输入信息为：我想吃一个鸭腿饭，ai查询餐厅数据库，然后获取到所有有鸭腿饭菜品的餐厅，返回给用户。
     * @return
     */
    @Tool(name = "餐厅推荐", description = "根据用户输入的菜品推荐相关餐厅")
    public Object getRestaurantRecommendation(@ToolParam(description = "用户输入菜品") String userInputDish) {
        if (userInputDish == null || userInputDish.trim().isEmpty()) {
            return "请输入您想吃的菜品名称";
        }

        try {
            // 通过菜品查询，获取有这个菜品的餐厅信息
            List<RestaurantProduct> restaurantProducts = aiRestaurantMapper.selectByDish(userInputDish);

            if (restaurantProducts == null || restaurantProducts.isEmpty()) {
                return "抱歉，暂时没有找到提供\"" + userInputDish + "\"的餐厅";
            }

            // 获取唯一的餐厅ID列表
            Set<Long> storeIds = restaurantProducts.stream()
                    .map(RestaurantProduct::getStoreId)
                    .filter(Objects::nonNull)
                    .collect(Collectors.toSet());

            // 根据餐厅ID查询详细信息
            List<RestaurantStore> stores = new ArrayList<>();
            for (Long storeId : storeIds) {
                RestaurantStore store = aiRestaurantMapper.selectById(storeId);
                if (store != null) {
                    stores.add(store);
                }
            }

            // 构建推荐结果
            //TODO:后续应该还能显示返回的餐厅的图片，这里暂不处理
           return "以下为相关餐厅推荐：\n" + stores.stream()
                   .map(store -> "餐厅名称：" + store.getStoreName() + "\n" +
                           "地址：" + store.getAddress() + "\n" +
                           "联系电话：" + store.getContactPhone() + "\n" +
                           "详情：" + store.getDetail() + "\n" +
                           "------------------------------------------")
                   .collect(Collectors.joining("\n"));

        } catch (Exception e) {
           // logger.error("查询餐厅信息时发生错误", e);
            return new BusinessException(100011,"查询餐厅信息时发生错误");
        }
    }
    /**
     * Ai点餐，可以通过ai自动生成点单
     */
    @Tool(name = "点餐", description = "用户点餐")
    public Object aiOrder(@ToolParam(description = "用户输入的点餐信息") String userInput) {
        return "用户输入的点餐信息：" + userInput;
    }



}
